#!/bin/bash
 E='echo -e';e='echo -en';trap "R;exit" 2
 ESC=$( $e "\e")
 TPUT(){ $e "\e[${1};${2}H" ;}
 CLEAR(){ $e "\ec";}
# 25 возможно это
 CIVIS(){ $e "\e[?25l";}
# это цвет текста списка перед курсором при значении 0 в переменной  UNMARK(){ $e "\e[0m";}
 MARK(){ $e "\e[1;90m";}
# 0 это цвет заднего фона списка
 UNMARK(){ $e "\e[0m";}
# ~~~~~~~~ Эти строки задают цвет фона ~~~~~~~~
 R(){ CLEAR ;stty sane;CLEAR;};
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 HEAD(){ for (( a=2; a<=34; a++ ))
  do
   TPUT $a 1
 $E "\033[34m\xE2\x94\x82                                                                                                                                                                   \xE2\x94\x82\033[0m";
  done
 TPUT 2 3
 $E "\033[1;2mКопирование примеров                                                                     \033[36m COPYING EXAMPLES\033[0m";
 TPUT 3 3
 $E "\033[2mЭти примеры демонстрируют возможность копировать значения тегов между файлами.\033[0m";
 TPUT 24 3
 $E "\033[1;2mПереименование примеров                                                                   \033[36mRENAMING EXAMPLES\033[0m";
 TPUT 33 4
 $E "\033[32mUp \xE2\x86\x91 \xE2\x86\x93 Down Select Enter\033[0m";
 MARK;TPUT 1 1
 $E "\033[0m\033[34m+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+\033[0m" ;UNMARK;}
  i=0; CLEAR; CIVIS;NULL=/dev/null
 FOOT(){ MARK;TPUT 35 1
 $E "\033[0m\033[34m+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+\033[0m";UNMARK;}
# это управляет кнопками ввер/хвниз
 i=0; CLEAR; CIVIS;NULL=/dev/null
#
 ARROW(){ IFS= read -s -n1 key 2>/dev/null >&2
           if [[ $key = $ESC ]];then
              read -s -n1 key 2>/dev/null >&2;
              if [[ $key = \[ ]]; then
                 read -s -n1 key 2>/dev/null >&2;
                 if [[ $key = A ]]; then echo up;fi
                 if [[ $key = B ]];then echo dn;fi
              fi
           fi
           if [[ "$key" == "$($e \\x0A)" ]];then echo enter;fi;}
  M0(){ TPUT  4 3; $e "Скопируйте значения всех доступных для записи тегов из «src.cr2» в «dst.jpg»             \033[32m exiftool -tagsFromFile src.cr2 dst.jpg                                \033[0m";}
  M1(){ TPUT  5 3; $e "Скопируйте значения всех доступных для записи тегов из «src.jpg» в «dst.jpg»             \033[32m exiftool -TagsFromFile src.jpg -all:all dst.jpg                       \033[0m";}
  M2(){ TPUT  6 3; $e "Удалите всю метаинформацию                                                               \033[33m exiftool -all=  dst.jpg                        \033[0m";}
  M3(){ TPUT  7 3; $e "Восстановите всю метаинформацию EXIF с нуля в образе                                     \033[32m exiftool -exif:all= -tagsfromfile @ -all:all -unsafe bad.jpg          \033[0m";}
  M4(){ TPUT  8 3; $e "Скопируйте метаинформацию из «a.jpg» в файл данных XMP                                   \033[32m exiftool -Tagsfromfile a.jpg out.xmp                                  \033[0m";}
  M5(){ TPUT  9 3; $e "Скопируйте всю метаинформацию из «a.jpg» в «b.jpg», удалив всю информацию XMP и эскиз    \033[32m exiftool -tagsFromFile a.jpg -XMP:All= -ThumbnailImage= -m b.jpg      \033[0m";}
  M6(){ TPUT 10 3; $e "Скопируйте заголовок с одного изображения на другое и установите новое имя автора        \033[32m exiftool -TagsFromFile src.jpg -title -author=Phil dst.jpg            \033[0m";}
  M7(){ TPUT 11 3; $e "Скопируйте ISO из одного изображения и комментарий из другого изображения в целевой образ\033[32m exiftool -TagsFromFile a.jpg -ISO -TagsFromFile b.jpg -comment dst.jpg\033[0m";}
  M8(){ TPUT 12 3; $e "Копируйте информацию EXIF из одного изображения в другое, за исключением тегов SubIFD    \033[32m exiftool -tagsfromfile src.jpg -exif:all --subifd:all dst.jpg         \033[0m";}
  M9(){ TPUT 13 3; $e "Используйте дату из метаинформации, чтобы установить дату изменения файловой системы     \033[32m exiftool '-FileModifyDate<DateTimeOriginal' dir                       \033[0m";}
 M10(){ TPUT 14 3; $e "Скопируйте всю возможную информацию из «src.jpg» и запишите в формате XMP в «dst.jpg»    \033[32m exiftool -TagsFromFile src.jpg '-xmp:all<all' dst.jpg                 \033[0m";}
 M11(){ TPUT 15 3; $e "Установите Описание изображения из имени файла после удаления расширения                 \033[32m exiftool '-Description<\${FileName;s/\.[^.]*\$//}' dir                  \033[0m";}
 M12(){ TPUT 16 3; $e "Преобразуйте информацию IPTC в XMP с соответствующими преобразованиями имен тегов        \033[32m exiftool -@ iptc2xmp.args -iptc:all= a.jpg                            \033[0m";}
 M13(){ TPUT 17 3; $e "Рекурсивно перезаписать все изображения JPG в dir с информацией                          \033[32m exiftool -tagsfromfile %d%f.CR2 -r -ext JPG dir                       \033[0m";}
 M14(){ TPUT 18 3; $e "Добавить марку камеры в список ключевых слов                                             \033[32m exiftool '-keywords+<make' image.jpg                                  \033[0m";}
 M15(){ TPUT 19 3; $e "Установите тег комментария для всех изображений в «dir» из значений тегов EXIF: ISO      \033[32m exiftool '-comment<ISO=\$exif:iso Exposure=\${shutterspeed}' dir        \033[0m";}
 M16(){ TPUT 20 3; $e "Скопируйте ICC_Profile из одного образа в другой                                         \033[32m exiftool -TagsFromFile src.jpg -icc_profile dst.jpg                   \033[0m";}
 M17(){ TPUT 21 3; $e "Скопируйте всю метаинформацию в исходной форме из изображения JPEG в файл MIE            \033[32m exiftool -TagsFromFile src.jpg -all:all dst.mie                       \033[0m";}
 M18(){ TPUT 22 3; $e "Bыполняет ту же задачу, за исключением того, что параметр -o не будет записывать в файл  \033[32m exiftool -o dst.mie -all:all src.jpg                                  \033[0m";}
 M19(){ TPUT 23 3; $e "[Дополнительно] Извлеките JpgFromRaw или PreviewImage из всех файлов, кроме JPG, в DIR, сохранив их с именами файлов, например image_EXT.jpg                    ";}
#
 M20(){ TPUT 25 3; $e "Примечание                                                                               \033[32m Note                                                                  \033[0m";}
 M21(){ TPUT 26 3; $e "Переименуйте old.jpg в new.jpg в каталоге dir                                            \033[32m exiftool -filename=new.jpg dir/old.jpg                                \033[0m";}
 M22(){ TPUT 27 3; $e "Переместите файлы из каталога «dir» в каталоги, названные исходными расширениями файлов  \033[32m exiftool -directory=%e dir                                            \033[0m";}
 M23(){ TPUT 28 3; $e "Переместите все файлы в «dir» в иерархию каталогов на основе года, месяца и дня          \033[32m exiftool '-Directory<DateTimeOriginal' -d %Y/%m/%d dir                \033[0m";}
 M24(){ TPUT 29 3; $e "Тот же эффект, что и выше, за исключением того, что файлы копируются, а не перемещаются  \033[32m exiftool -o . '-Directory<DateTimeOriginal' -d %Y/%m/%d dir           \033[0m";}
 M25(){ TPUT 30 3; $e "Переименуйте все файлы в «dir», добавив к имени файла название модели камеры             \033[32m exiftool '-filename<%f_\${model;}.%e' dir                              \033[0m";}
 M26(){ TPUT 31 3; $e "Переименуйте все изображения в dir в соответствии с датой и временем CreateDate          \033[32m exiftool '-FileName<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir          \033[0m";}
 M27(){ TPUT 32 3; $e "Задайте имена файлов изображений JPG в каталоге с помощью тегов CreateDate и FileNumber  \033[32m exiftool '-FileName<\${CreateDate}_\$filenumber.jpg' -d %Y%m%d -ext jpg \033[0m";}
#
 M28(){ TPUT 34 3; $e "Выход                                                                                    \033[32m EXIT                                                                  \033[0m";}
LM=28
   MENU(){ for each in $(seq 0 $LM);do M${each};done;}
    POS(){ if [[ $cur == up ]];then ((i--));fi
           if [[ $cur == dn ]];then ((i++));fi
           if [[ $i -lt 0   ]];then i=$LM;fi
           if [[ $i -gt $LM ]];then i=0;fi;}
REFRESH(){ after=$((i+1)); before=$((i-1))
           if [[ $before -lt 0  ]];then before=$LM;fi
           if [[ $after -gt $LM ]];then after=0;fi
           if [[ $j -lt $i      ]];then UNMARK;M$before;else UNMARK;M$after;fi
           if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
           UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
   INIT(){ R;HEAD;FOOT;MENU;}
     SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
# Функция возвращения в меню
     ES(){ MARK;$e " ENTER = main menu ";$b;read;INIT;};INIT
  while [[ "$O" != " " ]]; do case $i in
 0) S=M0;SC;if [[ $cur == enter ]];then R;echo " Скопируйте значения всех доступных для записи тегов из «src.cr2» в «dst.jpg», записав информацию в одноименные теги в предпочтительных группах.";ES;fi;;
 1) S=M1;SC;if [[ $cur == enter ]];then R;echo " Скопируйте значения всех доступных для записи тегов из «src.jpg» в «dst.jpg», сохранив исходные группы тегов.";ES;fi;;
 2) S=M2;SC;if [[ $cur == enter ]];then R;echo "
 Удалите всю метаинформацию с изображения «dst.jpg», затем скопируйте теги EXIF из «src.jpg»:
 exiftool -all= -tagsfromfile src.jpg -exif:all dst.jpg
#
 Следующая команда удалит все дополнительные метаданные, связанные с файлом
 exiftool -all= imagen.jpg
#
 Для удаления EXIF-данных из всех файлов изображений в директории:
 exiftool -all= *
#
 Для удаления EXIF-данных только из изображений, удовлетворяющих маске (например, с расширением .jpg):
 exiftool -all= *.jpeg
#
 Если нужно удалить метаданные рекурсивно из всех файлов в директории /home/user/photo/, не создавая бэкапы и с показам прогресса:
 exiftool -overwrite_original -progress -r -all=  /home/user/photo/*
";ES;fi;;
 3) S=M3;SC;if [[ $cur == enter ]];then R;echo "    Восстановите всю метаинформацию EXIF с нуля в образе. Этот метод можно использовать в изображениях JPEG для восстановления поврежденной информации EXIF, которая в
 противном случае не мог быть записан из-за ошибок. Тег «Небезопасный» - это ярлык для небезопасных тегов EXIF в изображениях JPEG, которые обычно не копируются.
 Видеть документацию по именам тегов для получения дополнительных сведений о небезопасных тегах.";ES;fi;;
 4) S=M4;SC;if [[ $cur == enter ]];then R;echo "    Скопируйте метаинформацию из «a.jpg» в файл данных XMP. Если файл данных XMP «out.xmp» уже существует, он будет обновлен с новой информацией. В противном случае
 будет создан файл данных XMP. Таким образом можно создавать только файлы, содержащие только метаданные (файлы, содержащие изображения, можно редактировать, но не
 созданный). См. «ПРИМЕРЫ НАПИСАНИЯ» выше, чтобы узнать о другом способе создания файлов XMP.";ES;fi;;
 5) S=M5;SC;if [[ $cur == enter ]];then R;echo " Скопируйте всю метаинформацию из «a.jpg» в «b.jpg», удалив всю информацию XMP и эскиз изображения из места назначения.";ES;fi;;
 6) S=M6;SC;if [[ $cur == enter ]];then R;echo " Скопируйте заголовок с одного изображения на другое и установите новое имя автора.";ES;fi;;
 7) S=M7;SC;if [[ $cur == enter ]];then R;echo " Скопируйте ISO из одного изображения и комментарий из другого изображения в целевой образ.";ES;fi;;
 8) S=M8;SC;if [[ $cur == enter ]];then R;echo " Копируйте только информацию EXIF из одного изображения в другое, за исключением тегов SubIFD.";ES;fi;;
 9) S=M9;SC;if [[ $cur == enter ]];then R;echo "    Используйте исходную дату из метаинформации, чтобы установить дату изменения файловой системы одного и того же файла для всех изображений в каталоге. (Обратите
 внимание, что \"-TagsFromFile @\" предполагается, если при перенаправлении информации, как в этом примере, не указан другой -TagsFromFile.)";ES;fi;;
10) S=M10;SC;if [[ $cur == enter ]];then R;echo " Скопируйте всю возможную информацию из «src.jpg» и запишите в формате XMP в «dst.jpg».";ES;fi;;
11) S=M11;SC;if [[ $cur == enter ]];then R;echo "    Установите Описание изображения из имени файла после удаления расширения. В этом примере используется «Расширенное форматирование» для выполнения операция
 подстановки для удаления последней точки и последующих символов из имени файла.";ES;fi;;
12) S=M12;SC;if [[ $cur == enter ]];then R;echo "    Преобразуйте информацию IPTC в XMP с соответствующими преобразованиями имен тегов и удалите исходную информацию IPTC из изображения. В этом примере используется
 iptc2xmp.args - файл, включенный в дистрибутив ExifTool и содержащий необходимые аргументы для преобразования информации IPTC в формат XMP. Также в дистрибутив
 включены xmp2iptc.args (который выполняет обратное преобразование) и еще несколько файлов .args для других преобразований между EXIF, IPTC и XMP.";ES;fi;;
13) S=M13;SC;if [[ $cur == enter ]];then R;echo " Рекурсивно перезаписать все изображения \"JPG\" в \"dir\" с информацией, скопированной из соответствующих изображений \"CR2\" в тех же каталогах.";ES;fi;;
14) S=M14;SC;if [[ $cur == enter ]];then R;echo " Добавить марку камеры в список ключевых слов.";ES;fi;;
15) S=M15;SC;if [[ $cur == enter ]];then R;echo "    Установите тег комментария для всех изображений в «dir» из значений тегов EXIF: ISO и ShutterSpeed. Результирующий комментарий будет в виде
 \"ISO=100 Exposure=1/60\"";ES;fi;;
16) S=M16;SC;if [[ $cur == enter ]];then R;echo " Скопируйте ICC_Profile из одного образа в другой.";ES;fi;;
17) S=M17;SC;if [[ $cur == enter ]];then R;echo "    Скопируйте всю метаинформацию в исходной форме из изображения JPEG в файл MIE. Если файл MIE не существует, он будет создан. Эта техника может использоваться для
 хранения метаданных изображения, чтобы его можно было вставить обратно в изображение (с помощью обратной команды) позже в рабочем процессе.";ES;fi;;
18) S=M18;SC;if [[ $cur == enter ]];then R;echo " Эта команда выполняет ту же задачу, что и команда выше, за исключением того, что параметр -o не будет записывать в выходной файл, который уже существует.";ES;fi;;
19) S=M19;SC;if [[ $cur == enter ]];then R;echo "
    exiftool -b -jpgfromraw -w %d%f_%ue.jpg -execute -b -previewimage -w %d%f_%ue.jpg -execute -tagsfromfile @ -srcfile %d%f_%ue.jpg -overwrite_original -common_args --ext jpg DIR
    [Дополнительно] Извлеките JpgFromRaw или PreviewImage из всех файлов, кроме JPG, в DIR, сохранив их с именами файлов, например image_EXT.jpg, затем добавьте все
 мета информация из исходных файлов в извлеченные изображения. Здесь командная строка разбита на три раздела (разделенных параметрами -execute), и каждый выполняется,
 как если бы это была отдельная команда. Параметр -common_args заставляет аргументы --ext jpg DIR применяться ко всем трем команд, а опция -srcfile позволяет
 извлеченному изображению JPG быть исходным файлом для третьей команды (тогда как файлы RAW являются исходным файлы для двух других команд).
";ES;fi;;
20) S=M20;SC;if [[ $cur == enter ]];then R;echo "    Путем записи тегов «FileName» и «Directory» файлы переименовываются и / или перемещаются в новые каталоги. Это может быть особенно полезно и эффективно для
 организация файлов по дате в сочетании с параметром -d. Новые каталоги создаются по мере необходимости, но существующие файлы не будут перезаписаны. В коды
 формата % d,% f и% e могут использоваться в новом имени файла для представления каталога, имени и расширения исходного файла, а% c может использоваться для добавления
 номер копии, если файл уже существует (подробности см. в параметре -w). Обратите внимание, что если используется в строке формата даты, к передать эти коды через
 синтаксический анализатор даты / времени. (И далее обратите внимание, что в пакетном файле Windows все символы '%' также должны быть экранированы, поэтому в этом
 крайнем случае case '%%%% f' необходим для передачи простого '% f' через два уровня синтаксического анализа.)
    Дополнительную документацию и примеры см. в https://exiftool.org/filename.html";ES;fi;;
21) S=M21;SC;if [[ $cur == enter ]];then R;echo " Переименуйте \"old.jpg\" в \"new.jpg\" в каталоге \"dir\".";ES;fi;;
22) S=M22;SC;if [[ $cur == enter ]];then R;echo " Переместите все файлы из каталога «dir» в каталоги, названные исходными расширениями файлов.";ES;fi;;
23) S=M23;SC;if [[ $cur == enter ]];then R;echo "    Переместите все файлы в «dir» в иерархию каталогов на основе года, месяца и дня «DateTimeOriginal». например) Эта команда переместит файл «dir / image.jpg»
 с «DateTimeOriginal» от «2005: 10: 12 16:05:56» до «2005/10/12 / image.jpg».";ES;fi;;
24) S=M24;SC;if [[ $cur == enter ]];then R;echo " Тот же эффект, что и выше, за исключением того, что файлы копируются, а не перемещаются.";ES;fi;;
25) S=M25;SC;if [[ $cur == enter ]];then R;echo "    Переименуйте все файлы в «dir», добавив к имени файла название модели камеры. Точка с запятой после имени тега внутри фигурных скобок приводит к появлению символов
 которые недопустимы в именах файлов Windows, которые необходимо удалить из значения тега (см. «Расширенное форматирование» для объяснения).";ES;fi;;
26) S=M26;SC;if [[ $cur == enter ]];then R;echo "    Переименуйте все изображения в dir в соответствии с датой и временем CreateDate, добавив номер копии с ведущим '-', если файл уже существует (\"% -c\"),
 и с сохранением исходного расширения файла (% e). Обратите внимание на дополнительный символ «%», необходимый для экранирования кодов файлов (% c и% e) в строке
 формата даты.";ES;fi;;
27) S=M27;SC;if [[ $cur == enter ]];then R;echo " Задайте имена файлов всех изображений JPG в текущем каталоге с помощью тегов CreateDate и FileNumber в виде «20060507_118-1861.jpg».";ES;fi;;
#
28) S=M28;SC;if [[ $cur == enter ]];then R;clear;exit 0;fi;;
 esac;POS;done
